"""
3-1 找出下述程序中的3处错误
1. iScore = 70
2. if Score >= 60:
3.  print("You passed.")
4. else:
5.    print("You failed.')
错误1：第2行中Score变量未定义，应为iScore
错误2：第3行print缩进错误，只缩进了两格，应为4格
错误3：第5行print语句中前面用了双引号，末尾却用了单引号，应将符号统一
"""

# 3-2写出下述程序的代码结果
# 源代码
a = 70
b = 55.3
c = 9
print(a >= 90 and b >= 60)
print(a % 9 + c)
print((not a < 90) or b < 60)
print(not (a < 90 and b < 60))
# 运行结果
# False
# 16
# True
# False

# 3-3 写出下述程序的执行结果
# 源代码
print("%s\t%.1f\t%d\t%.2f"%("Dora",899,10,899/10))
# 执行结果
# Dora    899.0    10    89.90

# 3-4 请写出0x0310和0b01111010的十进制数
a = "0x0310"
b = "0b01111010"
#十进制数分别为
ten_a = int(a,16)
ten_b = int(b,2)
print(f"0x0310的十进制数为{ten_a},0b01111010的十进制数为{ten_b}")
# 运行结果：
# 0x0310的十进制数为784,0b01111010的十进制数为122

# 3-5 请写出0x8F的二进制数
a = 0x8F
print(hex(a),"=",bin(a))
# 运行结果：
# 0x8f = 0b10001111

# 3-6 编写程序，从键盘上输入三个整数，输出它们的和与平均值
# 定义变量储存输入的数据
# 用int()函数将输入的内容转化为字符串
num_1 = int(input("请输入一个数字："))
num_2 = int(input("请再次输入一个数字："))
num_3 = int(input("请最后输入一个数字："))
# 通过运算符进行相应的计算
sum_num = num_1 + num_2 + num_3
average_num = sum_num / 3
# 用占位符将和用十进制整数表示，平均数保留两位小数
print("这三个数的和为：%d,平均数为：%.2f"%(sum_num,average_num))

#3-7 编写程序解决鸡兔同笼问题：鸡兔同笼共有头30只，脚90只，计算笼中鸡兔各有多少只。
iHeads = 30 # 变量，表示头的数量
iFeet = 90  # 变量表示脚的数量
a = iFeet - 2 * iHeads #假设全是鸡求余下的脚的数量
iRabbits = a / 2 # 兔的数量等于余下脚的/2
iChicken = iHeads - iRabbits #鸡的数量=头的数量-兔的数量
print("Number of chicken = %d," % iChicken,"number of rabbits = %d" % iRabbits)
print(iFeet == iChicken*2+iRabbits*4) # 验证脚数 = 鸡的数量*2+兔的数量*4

# 3-8 输入三角形的三条边边长，求三角形的面积，其中面积计算使用用户自定义函数表示
import math
length_1 = float(input("请输入三角形的边长1："))
length_2 = float(input("请输入三角形的边长2："))
length_3 = float(input("请输入三角形的边长3："))
if length_1 > 0 and length_2 > 0 and 0 < length_3 < length_1 + length_2 and length_1 + length_3 > length_2 and length_2 + length_3 >length_1:
    def triangle_area(a,b,c):
# 海伦公式计算三角形的面积
# 计算半周长
        s = (a + b + c)/2
# 海伦公式
        return math.sqrt(s * (s - a) * (s - b) * (s - c))
    area = triangle_area(length_1,length_2,length_3)
    print(f"这个三角形的面积是{area}")
else:
    print("输入三角形边长不满足条件，无法计算")

# 3-9 编程实现华氏温度到摄氏温度的转换，转换公式为：c = 5/9*（f-32）,其中f表示华氏温度，c表示摄氏温度
f = float(input("请输入当前的华氏温度（℉）："))
def transform(f):
    c = 5/9*(f-32)
    return c
transform_c = transform(f)
print("转换完成,当前的摄氏温度为（℃）：%.1f" %transform_c)

# 3-10 输入圆半径计算圆周长、圆面积、圆球表面积，计算结果保留3位小数。
round_r = float(input("请输入你要求的圆的半径(cm):"))
def perimeter(round_r):
    round_p = round_r*2*3.14
    return round_p
round_p = perimeter(round_r)
print("该圆的周长为:%.3f" %round_p)
def area(round_r):
    round_a = round_r**2*3.14
    return round_a
round_a = area(round_r)
print("该圆的面积:%.3f" %round_a)
def surface_area(round_r):
    round_s = round_r**2*4*3.14
    return round_s
round_s = surface_area(round_r)
print("该圆球的表面积：:%.3f" %round_s)

# 3-11 编写一个程序，读取英里数然后将它转换为公里数并显示结果。一英里约等于1.609千米。
mile = float(input("请输入英里数："))
def transform(mile):
    km = mile * 1.609
    return km
km = transform(mile)
print("转换完成：千米数为:%.3f" %km)

"""
3-12 某飞机加速度为a，起飞速度为v，
计算该飞机起飞所需最短跑道长度：L=v**2/(2*a).
编写一个程序提示用户输入起飞速度v(m/s)和加速度a(m/s**2)
计算飞机起飞的最短跑道长度。
"""
a = float(input("输入加速度(m/s**2)为："))
v = float(input("输入起飞速度(m/s)为："))
def runaway(a,v):
    min_runaway = v**2/(2*a)
    return min_runaway
min_runaway = runaway(a,v)
print("计算完成，飞机起飞最短跑道(m)为：%.5f" %min_runaway)

"""
3-13输入平面上两个点A和点B的坐标，即(x1,y1)和(x2,y2),要求完成如下操作：
1.逐一要求操作者输入A、B的平面坐标x1、y1、x2、y2.
2.计算两点之间的距离
3.利用turtle模块画出两点之间的连线。
4.在线的中央一侧显现线的长度
"""

x1 = float(input("请输入点A的横坐标x1:"))
y1 = float(input("请输入点A的纵坐标y1:"))
x2 = float(input("请输入点B的横坐标x2:"))
y2 = float(input("请输入点B的纵坐标y2:"))

import math
def distance(x1,y1,x2,y2):
    return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
dist = distance(x1,y1,x2,y2)
print("这两点之间的距离为：%.2f" %dist)
# 导入画笔
import turtle
# 创建画笔
t = turtle.Pen()
t.up()
t.goto(x1,y1)
t.down()
t.goto(x2,y2)
mid_x = (x1 + x2)/2
mid_y = (y1 + y2)/2
# 为了避免文本超出窗口，我们可以稍微调整文本的位置
# 这里我们选择在y方向上稍微偏下一点的位置显示文本
text_x = mid_x
text_y = mid_y - 20  # 20是文本高度的一个估计值，可以根据需要调整

# 显示文本
t.penup()
t.goto(text_x, text_y)
t.write(f"距离: {dist :.2f}", align="center", font=("Arial", 12, "normal"))

# 完成绘图
turtle.done()